package com.spzx.common.security.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;
import org.springframework.scheduling.annotation.EnableAsync;
import com.spzx.common.security.config.ApplicationConfig;
import com.spzx.common.security.feign.FeignAutoConfiguration;


@Target(ElementType.TYPE) // TYPE 指明该注解只能用于类，接口，枚举上
@Retention(RetentionPolicy.RUNTIME) // 运行时会被 JVM 保留
@Documented // 会被保留在 javadoc 文档
@Inherited // 一个类如果用了 @EnableCustomConfig，则其子类也会继承该注解
// 启用 AspectJ 自动代理，并暴露代理对象到 AopContext，用于解决内部方法调用导致的 AOP 失效问题
@EnableAspectJAutoProxy(exposeProxy = true)
// 配置 MyBatis 自动扫描指定路径下的 Mapper 接口
@MapperScan("com.spzx.**.mapper")
// 启用 Spring 的异步方法执行功能
@EnableAsync
// 导入额外的配置类：应用自定义配置与 Feign 客户端配置
@Import({ ApplicationConfig.class, FeignAutoConfiguration.class })
public @interface EnableCustomConfig
{

}
